#include "stdafx.h"
#include "BTCIFStream.h"

BTCIFStream::BTCIFStream()
{
}

BTCIFStream::~BTCIFStream()
{
	(void)Close();
}

/////////////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////////////

bool BTCIFStream::Open(const char* lpszFileName /* = NULL */)
{
	if(!lpszFileName)
		return false;

	// Try to open/create file.
	return m_File.Open( lpszFileName, CFile::modeRead);
}

/////////////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////////////

int BTCIFStream::Close()
{
	if( IsOpen())
		m_File.Close();

	return 0;
}

/////////////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////////////

long BTCIFStream::Read(void* pData, long lCount)
{
	if(!IsOpen())
		return -1;

	return m_File.Read( pData, lCount);
}

/////////////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////////////

long BTCIFStream::Seek(long lOffset, unsigned int nOrigin)
{
	if(!IsOpen())
		return -1;

	switch( nOrigin)
	{
		case Begin:		nOrigin = CFile::begin;
						break;

		case Current:	nOrigin = CFile::current;
						break;

		case End:		nOrigin = CFile::end;
						break;
	}

	return m_File.Seek( lOffset, nOrigin);
}

/////////////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////////////

bool BTCIFStream::IsOpen()
{
	return m_File.m_hFile != CFile::hFileNull;
}

/////////////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////////////

long BTCIFStream::GetPosition()
{
	return m_File.GetPosition();
}

/////////////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////////////

long BTCIFStream::GetSize()
{
	return m_File.GetLength();
}